package file;

import com.sun.corba.se.spi.orbutil.fsm.StateImpl;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Scanner;

/**
 * 1. Test01.java：在当前项目目录下新建100个文件，名字为:"1.txt"---"100.txt"
 * 2. Test02.java：将当前项目目录下1.txt-100.txt文件删除
 * 3. Test03.java：要求用户在控制台输入一个目录名，然后将这个目录创建在当前项目目录下
 * 4. Test04.java：要求用在控制台输入一个目录名，然后将当前项目目录下的这个目录删除。（只要求删除Test03创建的空目录）
 * 5. Test05.java：程序启动后，要求用户输入一个文件名，如果文件存在则提示并要求用户更换，直到该文件还不存在为止，然后将这个文件在当前目录中创建出来。
 * 6. Test06.java：列出当前目录中所有名字包含s的子项。要求：使用匿名内部类和lambda两种写法
 */
public class FileTest {
    public static void main(String[] args) throws IOException {
        //Test01
        for (int i = 0; i <100 ; i++) {
            File file = new File("./"+(i+1)+".txt");
            if (!file.exists()){
                file.createNewFile();
            }
        }
        System.out.println("创建完毕");

        //Test02
        for (int i = 0; i <100 ; i++) {
            File file = new File("./"+(i+1)+".txt");
            if (file.exists()){
                file.delete();
            }
        }
        System.out.println("删除完毕");

        //Test03
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入目录名");
        String s = scanner.nextLine();
        File dir = new File("./"+s);
        if (!dir.exists()){
            dir.mkdirs();
            System.out.println("目录已创建");
        }

        //Test04
        System.out.println("请输入要删除的目录名");
        String str = scanner.nextLine();
        File dir1 = new File("./"+str);
        if (dir1.exists()){
            dir1.delete();
            System.out.println("目录已删除");
        }else{
            System.out.println("目录不存在");
        }

        //Test05   程序启动后，要求用户输入一个文件名，如果文件存在则提示并要求用户更换，
        // 直到该文件不存在为止，然后将这个文件在当前目录中创建出来。

        while (true){
            System.out.println("请输入要添加的文件名");
            String files = scanner.nextLine();
            File file = new File("./"+files+".txt");
            if (file.exists()) {
                System.out.println("你输入的文件名已存在，请重新输入:");
            }
            if (!file.exists()){
                file.createNewFile();
                break;
            }
        }

        //Test06   列出当前目录中所有名字包含s的子项。要求：使用匿名内部类和lambda两种写法
/*        File dir6 = new File(".");
        if (dir6.isDirectory()){
            FileFilter filter = new FileFilter() {
                @Override
                public boolean accept(File file) {
                    String name = file.getName();
                    int index = name.indexOf("s");
                    return index!=(-1);
                }
            };
            System.out.println("目录中包含s的子项有:");
            File[] subs = dir6.listFiles(filter);
            for (File sub : subs ){
                System.out.println(sub.getName());
            }
        }*/

        //匿名内部类
        File dir7 = new File(".");
        if (dir7.isDirectory()){
            FileFilter filter =  file-> {
                return  file.getName().indexOf("s")!=-1;
                };
            System.out.println("目录中包含s的子项有:");
            File[] subs = dir7.listFiles(filter);
            for (File sub : subs ){
                System.out.println(sub.getName());
            }
        }
    }
}

